#include "squad/TurnBasedCombat.h"

//////////////////////////////////////////////////////////
// Реализация понятий предметной области

TurnBasedCombat::TurnBasedCombat(Scene & scene, View_interface & view) 
    : _scene(scene) 
    , _view(view)
{
}

void TurnBasedCombat::fight(Rules_interface & rules)
{
    _view.outputScene();

    while(!rules.isDone()) 
    {
        StepQueue_SW step_queue = rules.generateStepQueue();

        for(auto [squad_index, warrior_index] : step_queue) {
            _view.outputStep(squad_index, warrior_index);
            rules.produceStep(squad_index, warrior_index);
        }

        _view.outputScene();
    }

    size_t winner = rules.whoIsWin();

    _view.outputWinner(winner);
}
